package com.scrcu.cloud.wechat.home.endpoint.common.utils;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

@Slf4j
public class DecimalUtil {
    public static String DECIMAL_PATTERN="\\d+(\\.\\d{1,2})?"; //小数的正则表达式
    private static final int EARTH_RADIUS_KM = 6371; // 地球半径，单位为千米
    public static ArrayList<Double> extractDecimal(String input){
        Pattern pattern = Pattern.compile(DECIMAL_PATTERN);
        Matcher matcher = pattern.matcher(input);

        ArrayList<Double> decimalList = new ArrayList<>();
        while(matcher.find()){
            decimalList.add(Double.parseDouble(matcher.group()));
        }

        return decimalList;
    }

    /**
     * 从给定的字符串中提取所有的数字，并以双精度浮点数形式返回。
     *
     * @param input 输入的字符串，可能包含一个或多个数字。
     * @return 包含输入字符串中所有数字的双精度浮点数列表。如果输入字符串中没有数字，则返回空列表。
     */
    public static ArrayList<Double> extractNumber(String input) {
        // 使用正则表达式匹配字符串中的数字
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(input);

        // 创建一个列表来存储提取的数字
        ArrayList<Double> decimalList = new ArrayList<>();
        // 遍历匹配到的数字，并将其转换为双精度浮点数后添加到列表中
        while(matcher.find()){
            decimalList.add(Double.parseDouble(matcher.group()));
        }

        // 返回包含所有提取数字的列表
        return decimalList;
    }

    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        double dLat = Math.toRadians(lat2 - lat1);
        double dLon = Math.toRadians(lon2 - lon1);
        lat1 = Math.toRadians(lat1);
        lat2 = Math.toRadians(lat2);

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat1) * Math.cos(lat2) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double distance = EARTH_RADIUS_KM * c;
        return distance;
    }



}
